package com.example.producerconsumer;

/**
 * @version 1.0.0
 * @className: SyncStack
 * @description: 此类是（本质上：共同访问的）共享数据区域
 * @author: rosszhang
 * @date: 2022/5/13 14:09
 */
public class SyncStack {
    private String[] str = new String[10];

    private int index = 0;

    /**
     * 供生产者调用
     *
     * @param param:
     * @return void
     * @author rosszhang
     * @date 2022/5/13 14:12
     */
    public synchronized void push(String param) {
        if (index == param.length()) {
            try {
                wait();
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
        }
        //唤醒在此对象监视器上等待的单个线程
        this.notify();

        str[index] = param;
        index++;
    }

    /**
     * 供消费者调用
     *
     * @return java.lang.String
     * @author rosszhang
     * @date 2022/5/13 14:14
     */
    public synchronized String pop() {
        if (index == 0) {
            try {
                wait();
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
        }

        this.notify();
        index--;
        String product = str[index];
        return product;
    }


    /**
     * 就是定义一个返回值为数组的方法,返回的是一个String[]引用
     *
     * @return java.lang.String[]
     * @author rosszhang
     * @date 2022/5/13 14:15
     */
    public String[] pro() {
        return str;
    }
}
